local key = KEYS[1]; -- 第一个参数 锁的key
local threadId = ARGV[1]; -- 第二个参数线程唯一标识

if (redis.call('hexists', key, threadId) == 0) then --判断当前锁是否被自己持有
    return nil; -- 不是自己直接返回
end;

local count = redis.call('hincrby', key, threadId, -1); -- 是自己的锁，重入次数-1

if (count == 0) then -- 判断重入次数是否已经为0
    redis.call('del', key); -- 等于0说明可以释放锁，直接删除
    return nil;
end;